public class Date {
    //成员变量，字段，属性
    public int year;
    public int month;
    public int day;
    //构造方法
    public Date() {
        System.out.println("调用了该构造方法1");
    }
    public Date(int year) {
        this.year = year;
        System.out.println("调用了该构造方法2");
    }
    public Date(int year,int month) {
        this.year = year;
        this.month = month;
        System.out.println("调用了该构造方法3");
    }
    public Date(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了该构造方法4");
    }
    //成员方法
    public void setDate(int year,int month,int day) {//设置成员变量
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void print() {
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
         //对象的构造及初始化
        //1.1默认初始化：在创建方法变量时，不进行初始化，编译器会进行默认的初始化
        //1.2就地初始化：在创建方法变量时，直接在创建时对方法变量赋值。
        //1.3构造方法：特殊的方法(方法名与类名相同、方法没有返回值)，通过方法对方法变量使用this引用进行赋值
        //构造方法的特性
        //2.1方法名与类名相同，方法没有返回值
        //2.2对象实例化时构造方法只调用一次(如人只出生一次)
        //2.3当不写构造方法时，编译器会自动加入一个隐藏的构造方法,当有构造方法时，编译器就不会添加构造方法(救急不救穷)
        //2.4构造方法可以进行重载，进行初始化时可以选择合适的构造方法(快速写构造方法的快捷键：Generate(AIt + Insert) + Constructor)
        //2.5需要进行初始化时，可以使用this引用来调用构造方法进行初始化，但this()必须放在类的第一行
        //2.6不能实现闭环即抛皮球
    }
    public static void main1(String[] args) {
        //1.1使用this引用指向对象，可以避免形参和局部变量同名问题
        //1.2为对象调用方法指定对象即谁调用，谁就是对象
        //2.1this引用:指向当前对象(引用的是成员方法的对象)
        //3.1this引用的类型，谁调用它就是谁的类对应的类型
        //3.2只能在成员方法中使用this引用
        //3.3在成员方法中，使用了this引用指向一个对象，就不能再指向其它对象
        //3.4this引用实质上是成成员方法一个隐藏的形参，
        //当对象调用时，就是通过成员方法的对象的引用传递给成员方法this进行接收
        Date date = new Date();
        date.setDate(1999,1,30);
        date.print();

        Date date1 = new Date();
        date.setDate(2000,12,14);
        date.print();
    }
}

